// eslint.config.js
import js from '@eslint/js'
import globals from 'globals'
import tseslint from 'typescript-eslint'
import vue from 'eslint-plugin-vue'
import prettier from 'eslint-plugin-prettier/recommended' // 包含 eslint-config-prettier 和 eslint-plugin-prettier

export default tseslint.config(
  // === 基础 JavaScript 推荐规则 ===
  js.configs.recommended,

  // === TypeScript 推荐规则 ===
  ...tseslint.configs.recommended,

  // === Vue 3 推荐规则（essential）===
  ...vue.configs['flat/essential'],

  // === Prettier 集成：关闭所有与格式化冲突的规则，并启用 prettier 自动化 ===
  prettier,

  // === 通用语言选项 ===
  {
    languageOptions: {
      globals: {
        ...globals.browser, // window, document 等浏览器全局变量
        ...globals.node, // Node.js 全局变量（如需）
      },
      parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module',
      },
    },
    // 启用 Vue 文件中的 TypeScript 解析
    files: ['**/*.vue'],
    languageOptions: {
      parser: vue.processors['.vue'].parser,
      parserOptions: {
        parser: tseslint.parser,
        ecmaVersion: 'latest',
        sourceType: 'module',
        extraFileExtensions: ['.vue'], // 允许 .vue 文件被 TS 解析器处理
      },
    },
  },

  // === TypeScript 文件专用配置（启用类型感知规则）===
  {
    files: ['**/*.ts', '**/*.vue'],
    ...tseslint.configs.recommendedTypeChecked,
    languageOptions: {
      parserOptions: {
        project: './tsconfig.json', // 指向你的 tsconfig.json
        tsconfigRootDir: import.meta.dirname,
      },
    },
  },

  // === 自定义规则（可选）===
  {
    rules: {
      // --- Vue 规则 ---
      'vue/multi-word-component-names': 'off', // 关闭组件名必须多词（适合小项目）
      'vue/no-v-html': 'warn', // 警告使用 v-html（潜在 XSS）

      // --- TypeScript 规则 ---
      '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
      '@typescript-eslint/no-explicit-any': 'warn',
      '@typescript-eslint/consistent-type-imports': 'error', // 推荐使用 `import type`
      '@typescript-eslint/no-non-null-assertion': 'warn',

      // --- JavaScript 规则 ---
      'no-console': ['warn', { allow: ['warn', 'error'] }],
      'no-debugger': 'warn',
    },
  },

  // === 测试文件特殊配置（可选）===
  {
    files: ['**/__tests__/**/*', '**/*.test.*', '**/tests/**/*'],
    languageOptions: {
      globals: {
        ...globals.jest, // Jest 全局变量
      },
    },
  },
)
